package com.cskaoyan.javase.oop3._2inner._3local._0introduction;

/**
 * @description: 局部内部类
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import org.omg.CORBA.PUBLIC_MEMBER;

/**
 * 局部内部类是定义在一个方法或者一个作用域里面的类
 * 它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内
 * 将局部内部类看成是局部变量即可
 * 语法:
 * 在局部位置:
 *      class 类名{
 *          //类体
 *      }
 *
 * 局部内部类的特点:
 *      1,局部内部类是定义在局部位置(比如说方法内)的内部类,它被局部的作用域限制了作用范围,出了这个作用域就失效了,这是一种比成员内部类更多极致的封装,即便是在外围类中也只有装内部类的方法才能感受到内部类存在
 *      2,局部内部类如何触发类加载,如何创建对象?
 *          只能在装内部类的方法中创建它的对象,除此之外别无他法
 *      3,局部内部类有什么用?
 *          局部内部类很显著增加代码层级,使代码可读性变差,如无必要不要乱用它
 *          如果你在方法等局部位置碰到了一个问题,需要一个对象来解决它,但是你又不希望这个类被外界感知,所以就需要使用局部内部类
 *
 *
 * > 局部内部类自身的特点
 * > 1，访问权限修饰符
 *      局部变量不需要访问权限修饰符,因为它已经被方法限制了作用域,而局部内部类也是这样的.它已经被方法限制了作用域,它也没有访问权限修饰符,也没有static
 *      但是是可以用final修饰的
 *
 * > 2，成员特点
 *      局部内部类的成员特点和成员内部类相似,可以定义普通成员,也可以定义不触发类加载的全局常量,但是没有static声明
 *
 * > 3，定义位置
 *      只要是局部位置都可以
 *
 * > 4，继承和实现
 *      局部内部类经常用来继承一个外部类或者实现一个外部接口
 *      反过来,外部类是不能继承局部内部类的
 *
 */
public class Demo {
    public static void main(String[] args) {

    }
}

class EnclosedClazz {
    //方法内部的局部内部类
    public void test() {
        //定义局部内部类
         class Inner {
            //static int a = 1;
             static final int A = 10;
             //static {}
             {
                 class A{
                     {
                         class B{

                         }
                     }
                 }
             }
             public Inner() {
             }
         }
         //必须在方法内部创建对象
        Inner i = new Inner();
    }

}
